package com.haixiaoke.saas.contract.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.contract.domain.LesseeContract;

import java.util.List;

/**
 * 租客合同Service接口
 *
 * @author panda
 * @date 2024-06-04
 */
public interface ILesseeContractService {
    /**
     * 查询租客合同
     *
     * @param lesseeContractId 租客合同主键
     * @return 租客合同
     */
    LesseeContract selectLesseeContractByLesseeContractId(String lesseeContractId);

    LesseeContract selectLesseeContractById(String lesseeContractId);

    /**
     * 查询租客合同列表
     *
     * @param lesseeContract 租客合同
     * @return 租客合同集合
     */
    List<LesseeContract> selectLesseeContractList(LesseeContract lesseeContract);

    /**
     * 新增租客合同
     *
     * @param lesseeContract 租客合同
     * @return 结果
     */
    int insertLesseeContract(LesseeContract lesseeContract);

    /**
     * 修改租客合同
     *
     * @param lesseeContract 租客合同
     * @return 结果
     */
    int updateLesseeContract(LesseeContract lesseeContract);

    /**
     * 批量删除租客合同
     *
     * @param lesseeContractIds 需要删除的租客合同主键集合
     * @return 结果
     */
     int deleteLesseeContractByLesseeContractIds(String[] lesseeContractIds);

    /**
     * 删除租客合同信息
     *
     * @param lesseeContractId 租客合同主键
     * @return 结果
     */
     int deleteLesseeContractByLesseeContractId(String lesseeContractId);

    List<LesseeContract> flatSelectLesseeContractList(LesseeContract lesseeContract);

    /**
     * 根据租客合同id查询电子签章预览地址
     * @param lesseeContract
     * @return
     */
    String selectLesseeContractElectronicVisaPreviewUrl(LesseeContract lesseeContract);

    /**
     * 上传合同图片
     * @param lesseeContract
     * @return
     */
    AjaxResult uploadContractImage(LesseeContract lesseeContract);

    /**
     * 撤销租客合同
     * @param lesseeContract
     * @return
     */
    int repealLesseeContract(LesseeContract lesseeContract);

    /**
     * 订单作废后撤销租客合同
     * @param orderId
     * @return
     */
    int repealLesseeContractByOrderId(String orderId);

    /**
     * 检查是否可以重新发起合同(关联的订单是否有指定状态的合同)
     * @param orderId
     * @return  true:不可以重新发起 false:可以重新发起
     */
    boolean checkRelaunch(String orderId);

    /**
     * 签署租客合同
     * @param lesseeContract
     * @param participantType true为乙方,false为甲方
     * @param conUserId 签署人id
     * @return
     */
    AjaxResult signingLesseeContract(LesseeContract lesseeContract, Boolean participantType, Long conUserId);

    /**
     * 小程序删除租客合同
     * @param lesseeContractId 租客合同id
     * @return
     */
    int frontDeletedLesseeContract(String lesseeContractId);

    /**
     * 根据流程id查询租客合同
     * @param flowId
     * @return
     */
    LesseeContract selectLesseeContractByFlowId(String flowId);

    /**
     * 每天凌晨10分执行租客合同逾期定时任务
     */
    void lesseeContractOverdueTask();

    LesseeContract selectLesseeContractByOrderId(String orderId);

}
